home *** CD-ROM | disk | FTP | other *** search
/ Programming Sound Cards / Programming Sound Cards.iso / sound_56 / dosproc.asm < prev    next >
Assembly Source File  |  1995-01-01  |  2KB  |  72 lines

  1. ; DOSPROC.ASM - "DOS library"
  2. ; STATUS: TEST     :OK
  3. ;         COMMENTs :READY
  4.  
  5. ; Not much to say about this file.
  6. ; It's a library for using DOS memory managment (640KB) in pascal
  7.  
  8. model large,pascal
  9.  
  10. .code
  11. .386
  12.  
  13. public getdosmem          ; allocate memory
  14. public freedosmem         ; free memory
  15. public getfreesize        ; summary of all free memory blocks
  16. public setsize            ; change size of an allready allocated memory block
  17.  
  18. getdosmem PROC NEAR segm:DWORD,len:DWORD
  19.           les di,segm
  20.           mov ebx,len
  21.           add ebx,15
  22.           shr ebx,4             ; div 16 ...
  23.           mov ah,48h            ; function 48h - try to allocate dos memory
  24.           int 21h               ; returns segment in AX
  25.           jnc more
  26.           xor ax,ax             ; return false
  27.           ret
  28. more:     mov es:[di+2],ax
  29.           xor ax,ax
  30.           mov es:[di],ax        ; offset = 0
  31.           mov ax,0101h          ; return true
  32.           ret
  33. getdosmem ENDP
  34.  
  35. freedosmem  PROC NEAR segm:DWORD   ; free reserved memory
  36.             les di,segm            ; segm - pointer to pointer variable
  37.             les di,es:[di]         ; load ES with es:[di+2]
  38.             mov ah,49h             ; function 49h - free memory block
  39.             int 21h
  40.             les di,segm
  41.             xor ax,ax
  42.             mov es:[di],ax
  43.             mov es:[di+2],ax      ; set pointer to NIL !
  44.             ret
  45. freedosmem  ENDP
  46.  
  47. setsize  PROC NEAR segm:DWORD,len:DWORD   ; change size
  48.          mov ebx,len
  49.          add ebx,15
  50.          shr ebx,4
  51.          les di,segm
  52.          les di,es:[di]           ; load ES with es:[di+2]
  53.          mov ah,4Ah               ; function 4Ah - change size of a memory block
  54.          int 21h
  55.          mov ax,0001h
  56.          jc  ok
  57.          xor ax,ax
  58. ok:      ret
  59. setsize  ENDP
  60.  
  61. getfreesize PROC NEAR       ; get length of free memory
  62.             mov bx,0ffffh
  63.             mov ah,48h      ; function 48h - get 1MB dos memory
  64.                             ; that's not possible, but you'll get free memory
  65.                             ; in that way ...
  66.             int 21h
  67.             mov ax,bx
  68.             ret
  69. getfreesize ENDP
  70.  
  71. ends
  72. end